home *** CD-ROM | disk | FTP | other *** search
Wrap
/* cfengine for GNU Copyright (C) 1995/6 Free Software Foundation, Inc. This file is part of GNU cfengine - written and maintained by Mark Burgess, Dept of Computing and Engineering, Oslo College, Dept. of Theoretical physics, University of Oslo This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /*******************************************************************/ /* */ /* GLOBAL variables for cfengine */ /* */ /* Although these are global in C, they are layed out in */ /* terms of their ownership to certain logical "objects", */ /* to illustrate the object oriented structure. */ /* */ /*******************************************************************/ #include "cf.defs.h" #define PUBLIC /* Just for fun */ #define PRIVATE #define PROTECTED /*******************************************************************/ /* */ /* Global : Truly global variables here */ /* */ /* */ /*******************************************************************/ char VBUFF[bufsize]; /* General workspace, contents not guaranteed */ char OUTPUT[bufsize*2]; int AUTHENTICATED = false; char CHECKSUMDB[bufsize]; int CHECKSUMUPDATES = false; /*******************************************************************/ /* */ /* TCP wrapper object. This is not part of cfengine, but these */ /* variables have to be defined anyway! */ /* */ /*******************************************************************/ PRIVATE int allow_severity = 0; PRIVATE int deny_severity = 0; /*******************************************************************/ /* */ /* cfd.main object : the root application object */ /* */ /* */ /*******************************************************************/ PROTECTED struct Auth *VADMIT=NULL; PROTECTED struct Auth *VADMITTOP=NULL; PROTECTED struct Auth *VDENY=NULL; PROTECTED struct Auth *VDENYTOP=NULL; /*******************************************************************/ /* */ /* cfengine.main object : the root application object */ /* */ /* */ /*******************************************************************/ PUBLIC char VERSION[maxvarsize]; PUBLIC char *COPYRIGHT = "Free Software Foundation 1995, 1996, 1997\nDonated by Mark Burgess, Centre of Science and Technology\nFaculty of Engineering, Oslo College, 0254 Oslo, Norway"; PRIVATE char *VPRECONFIG = "cf.preconf"; PRIVATE char *VRCFILE = "cfrc"; PUBLIC char VINPUTFILE[bufsize]; PUBLIC char VCURRENTFILE[bufsize]; PUBLIC char VLOGFILE[bufsize]; PUBLIC char VSETUIDLOG[bufsize]; PUBLIC char VARCH[maxvarsize]; PUBLIC char VPREFIX[maxvarsize]; PUBLIC char VREPOSITORY[bufsize]; PUBLIC char ALLCLASSBUFFER[bufsize]; PUBLIC short DEBUG = false; PUBLIC short D1 = false; PUBLIC short D2 = false; PUBLIC short D3 = false; PUBLIC short VERBOSE = false; PUBLIC short INFORM = false; PUBLIC short LOGGING = false; PUBLIC short INFORM_save; PUBLIC short LOGGING_save; PUBLIC short CFPARANOID = false; PUBLIC short SHOWACTIONS = false; PRIVATE int RPCTIMEOUT = 30; /* seconds */ PROTECTED int SENSIBLEFILECOUNT = 2; PROTECTED int SENSIBLEFSSIZE = 1000; PUBLIC time_t CFSTARTTIME; PUBLIC enum classes VSYSTEMHARDCLASS; PUBLIC struct Item VDEFAULTBINSERVER = /* see GetNameInfo(), main.c */ { NULL, NULL }; PUBLIC struct utsname VSYSNAME; /* For uname (2) */ PUBLIC mode_t DEFAULTMODE = (mode_t) 0755; PUBLIC mode_t DEFAULTSYSTEMMODE = (mode_t) 0644; PROTECTED int VIFELAPSED = 0; PROTECTED int VEXPIREAFTER = 120; PROTECTED int VDEFAULTIFELAPSED = 0; /* minutes */ PROTECTED int VDEFAULTEXPIREAFTER = 120; PUBLIC int SD = cf_not_connected; /* socket */ /*******************************************************************/ /* Data structures - root pointers */ /*******************************************************************/ PROTECTED struct Item *VTIMEZONE = NULL; PROTECTED struct Item *VMOUNTLIST = NULL; PROTECTED struct Item *VEXCLUDECOPY = NULL; PROTECTED struct Item *VEXCLUDELINK = NULL; PROTECTED struct Item *VCOPYLINKS = NULL; PROTECTED struct Item *VLINKCOPIES = NULL; PROTECTED struct Item *VEXCLUDEPARSE = NULL; PROTECTED struct Item *VCPLNPARSE = NULL; PROTECTED struct Item *VINCLUDEPARSE = NULL; PROTECTED struct Item *VIGNOREPARSE = NULL; PROTECTED struct Item *VSERVERLIST = NULL; PROTECTED struct Item *VHEAP = NULL; /* Points to the base of the attribute heap */ PROTECTED struct Item *VNEGHEAP = NULL; PROTECTED struct Item *VMOUNTABLES = NULL; /* Points to the list of mountables */ PROTECTED struct Item *VMOUNTED = NULL; PROTECTED struct Tidy *VTIDY = NULL; /* Points to the list of tidy specs */ PROTECTED struct Tidy *VTIDYTOP = NULL; PROTECTED struct Item *VPROCESSES = NULL; /* Points to proc list */ PROTECTED struct Disk *VREQUIRED = NULL; /* List of required file systems */ PROTECTED struct Disk *VREQUIREDTOP = NULL; PROTECTED struct ShellComm *VSCRIPT = NULL; /* List of scripts to execute */ PROTECTED struct ShellComm *VSCRIPTTOP = NULL; PROTECTED struct Interface *VIFLIST = NULL; PROTECTED struct Interface *VIFLISTTOP = NULL; PROTECTED struct Mounted *MOUNTED = NULL; /* Files systems already mounted */ PROTECTED struct MiscMount *VMISCMOUNT = NULL; PROTECTED struct MiscMount *VMISCMOUNTTOP = NULL; PROTECTED struct Item *VBINSERVERS = &VDEFAULTBINSERVER; PROTECTED struct Link *VLINK = NULL; PROTECTED struct Link *VLINKTOP = NULL; PROTECTED struct File *VFILE = NULL; PROTECTED struct File *VFILETOP = NULL; PROTECTED struct Image *VIMAGE = NULL; PROTECTED struct Image *VIMAGETOP=NULL; PROTECTED struct Item *VHOMESERVERS = NULL; PROTECTED struct Item *VSETUIDLIST = NULL; PROTECTED struct Disable *VDISABLELIST = NULL; PROTECTED struct Disable *VDISABLETOP = NULL; PROTECTED struct File *VMAKEPATH = NULL; PROTECTED struct File *VMAKEPATHTOP = NULL; PROTECTED struct Link *VCHLINK = NULL; PROTECTED struct Link *VCHLINKTOP = NULL; PROTECTED struct Item *VIGNORE = NULL; PROTECTED struct Item *VHOMEPATLIST = NULL; PROTECTED struct Item *EXTENSIONLIST = NULL; PROTECTED struct Item *SUSPICIOUSLIST = NULL; PROTECTED struct Item *VRESOLVE = NULL; PROTECTED struct Item *VIMPORT=NULL; PROTECTED struct Item *VACTIONSEQ=NULL; PROTECTED struct Item *VACCESSLIST=NULL; PROTECTED struct Item *VADDCLASSES=NULL; PROTECTED struct Item *VALLADDCLASSES=NULL; PROTECTED struct UnMount *VUNMOUNT=NULL; PROTECTED struct UnMount *VUNMOUNTTOP=NULL; PROTECTED struct Edit *VEDITLIST=NULL; PROTECTED struct Edit *VEDITLISTTOP=NULL; PROTECTED struct CFACL *VACLLIST=NULL; PROTECTED struct CFACL *VACLLISTTOP=NULL; PROTECTED struct Item *VCLASSDEFINE=NULL; PROTECTED struct Process *VPROCLIST=NULL; PROTECTED struct Process *VPROCTOP=NULL; PROTECTED struct Item *VREPOSLIST=NULL; /*********************************************************************/ /* Resource names */ /*********************************************************************/ PRIVATE char *VRESOURCES[] = /* one for each major variable in class.c */ { "mountcomm", "unmountcomm", "ethernet", "mountopts", "unused", "fstab", "maildir", "netstat", "pscomm", "psopts", NULL }; /*******************************************************************/ /* Reserved variables */ /*******************************************************************/ PROTECTED char VFACULTY[maxvarsize]; PROTECTED char VDOMAIN[maxvarsize]; PROTECTED char VSYSADM[maxvarsize]; PROTECTED char VNETMASK[maxvarsize]; PROTECTED char VBROADCAST[maxvarsize]; PROTECTED char VMAILSERVER[bufsize]; PROTECTED char VDEFAULTROUTE[maxvarsize]; PROTECTED char VNFSTYPE[maxvarsize]; PROTECTED char VFQNAME[maxvarsize]; PROTECTED char VUQNAME[maxvarsize]; PROTECTED char LOGFILE[maxvarsize]; PROTECTED char VYEAR[5]; /*******************************************************************/ /* Command line options */ /*******************************************************************/ /* GNU STUFF FOR LATER #include "getopt.h" */ #include "../pub/getopt.h" PRIVATE struct option OPTIONS[] = { { "help",no_argument,0,'h' }, { "debug",optional_argument,0,'d' }, { "verbose",no_argument,0,'v' }, { "traverse-links",no_argument,0,'l' }, { "recon",no_argument,0,'n' }, { "dry-run",no_argument,0,'n'}, { "just-print",no_argument,0,'n'}, { "no-ifconfig",no_argument,0,'i' }, { "file",required_argument,0,'f' }, { "parse-only",no_argument,0,'p' }, { "no-mount",no_argument,0,'m' }, { "no-check-files",no_argument,0,'c' }, { "no-check-mounts",no_argument,0,'C' }, { "no-tidy",no_argument,0,'t' }, { "no-commands",no_argument,0,'s' }, { "sysadm",no_argument,0,'a' }, { "version",no_argument,0,'V' }, { "define",required_argument,0,'D' }, { "negate",required_argument,0,'N' }, { "undefine",required_argument,0,'N' }, { "delete-stale-links",no_argument,0,'L' }, { "no-warn",no_argument,0,'w' }, { "silent",no_argument,0,'S' }, { "quiet",no_argument,0,'w' }, { "no-preconf",no_argument,0,'x' }, { "no-links",no_argument,0,'X'}, { "no-edits",no_argument,0,'e'}, { "enforce-links",no_argument,0,'E'}, { "no-copy",no_argument,0,'k'}, { "use-env",no_argument,0,'u'}, { "no-processes",no_argument,0,'P'}, { "underscore-classes",no_argument,0,'U'}, { "no-hard-classes",no_argument,0,'H'}, { "no-splay",no_argument,0,'q'}, { "no-lock",no_argument,0,'K'}, { "auto",no_argument,0,'A'}, { "inform",no_argument,0,'I'}, { "no-modules",no_argument,0,'M'}, { "force-net-copy",no_argument,0,'b'}, { "secure-input",no_argument,0,'Y'}, { NULL,0,0,0 } }; /*********************************************************************/ /* Actions */ /*********************************************************************/ PRIVATE char *ACTIONTEXT[] = { "", "Control Defintions:", "Groups:", "File Imaging:", "Resolve:", "Processes:", "Files:", "Tidy:", "Home Servers:", "Binary Servers:", "Mail Server:", "Required Filesystems", "Reading Mountables", "Links:", "Import files:", "User Shell Commands:", "Disable Files:", "Make Directory Path:", "Ignore File Paths:", "Broadcast Mode:", "Default Packet Route:", "Miscellaneous Mountables:", "Edit Simple Text File:", "Unmount filesystems:", "Admit network access:", "Deny network access:", "Access control lists:", "Additional network interfaces", NULL }; PRIVATE char *ACTIONID[] = /* The actions which may be specified as indexed */ { /* macros in the "special" section of the file */ "", "control", "groups", "copy", "resolve", "processes", "files", "tidy", "homeservers", "binservers", "mailserver", "required", "mountables", "links", "import", "shellcommands", "disable", "makepath", "ignore", "broadcast", "defaultroute", "miscmounts", "editfiles", "unmount", "admit", "deny", "acl", "interfaces", NULL }; /*********************************************************************/ /* file/image actions */ /*********************************************************************/ PROTECTED char *FILEACTIONTEXT[] = { "warnall", "warnplain", "warndirs", "fixall", "fixplain", "fixdirs", "touch", "linkchildren", "create", NULL }; /*********************************************************************/ PRIVATE char *ACTIONSEQTEXT[] = { "directories", "links", "simplelinks", "childlinks", "mailcheck", "required", "tidy", "shellcommands", "files", "disable", "addmounts", "editfiles", "mountall", "unmount", "resolve", "copy", "netconfig", "checktimezone", "mountinfo", "processes", "none", NULL }; /*******************************************************************/ /* */ /* parse object : variables belonging to the Parse object */ /* */ /* */ /*******************************************************************/ PUBLIC short ISCFENGINE; /* for re-using parser code in cfd */ PRIVATE short TIDYDIRS = false; PRIVATE short TRAVLINKS = false; PRIVATE short PTRAVLINKS = false; PRIVATE short DEADLINKS = true; PRIVATE short DONTDO = false; PRIVATE short IFCONF = true; PRIVATE short PARSEONLY = false; PRIVATE short GOTMOUNTINFO = true; PRIVATE short NOMOUNTS = false; PRIVATE short NOMODULES = false; PRIVATE short NOFILECHECK = false; PRIVATE short NOTIDY = false; PRIVATE short NOSCRIPTS = false; PRIVATE short PRSYSADM = false; PRIVATE short MOUNTCHECK = false; PRIVATE short NOPROCS = false; PRIVATE short NOEDITS = false; PRIVATE short KILLOLDLINKS = false; PRIVATE short IGNORELOCK = false; PRIVATE short NOPRECONFIG = false; PRIVATE short WARNINGS = true; PRIVATE short NONALPHAFILES = false; PRIVATE short MINUSF = false; PRIVATE short NOLINKS = false; PRIVATE short ENFORCELINKS = false; PRIVATE short FORCELINK; PRIVATE short NOCOPY = false; PRIVATE short FORCENETCOPY = false; PRIVATE short SILENT=false; PRIVATE short EDITVERBOSE=false; PRIVATE short LINKSILENT; PRIVATE short FORCECOPY=false; PRIVATE short IMAGEBACKUP=true; PRIVATE short ROTATE=0; PRIVATE short USEENVIRON=false; PRIVATE short PROMATCHES=-1; PRIVATE short EDABORTMODE=false; PRIVATE short UNDERSCORE_CLASSES=false; PRIVATE short NOHARDCLASSES=false; PRIVATE short NOSPLAY = false; PROTECTED struct Item *VACLBUILD = NULL; PRIVATE char LINKTYPE = 's'; PRIVATE char AGETYPE = 'a'; PRIVATE char COPYTYPE = 't'; PRIVATE char DEFAULTCOPYTYPE = 't'; PRIVATE char REPOSCHAR = '_'; PRIVATE char LISTSEPARATOR = ':'; PRIVATE char LINKDIRS = 'k'; PRIVATE char DISCOMP = '='; PRIVATE char USESHELL = 'y'; /* yes or no */ PRIVATE char PURGE = 'n'; PRIVATE char LOGP = 'd'; /* y,n,d=default*/ PRIVATE char INFORMP = 'd'; PRIVATE char MOUNTMODE = 'w'; /* o or w for rw/ro*/ PRIVATE char DELETEDIR = 't'; /* t=true */ PRIVATE char DELETEFSTAB = 't'; PRIVATE char FORCE = 'f'; PRIVATE char STEALTH = 'f'; PRIVATE char CHECKSUM = 'n'; PRIVATE char VUIDNAME[maxvarsize]; PRIVATE char VGIDNAME[maxvarsize]; PRIVATE char CURRENTITEM[bufsize]; /* Many of these are recycled during run/parsing */ PRIVATE char GROUPBUFF[bufsize]; PRIVATE char ACTIONBUFF[bufsize]; PRIVATE char CURRENTPATH[bufsize]; PRIVATE char CLASSBUFF[bufsize]; PRIVATE char LINKFROM[bufsize]; PRIVATE char LINKTO[bufsize]; PRIVATE char ERROR[bufsize]; PRIVATE char MOUNTFROM[bufsize]; PRIVATE char MOUNTONTO[bufsize]; PRIVATE char DESTINATION[bufsize]; PRIVATE char IMAGEACTION[bufsize]; /* end recyclable (see cf.defs.h) */ PRIVATE char VIFNAME[16]; PRIVATE char VIFNAMEOVERRIDE[16]; PUBLIC int ERRORCOUNT = 0; PUBLIC int LINENUMBER = 1; PRIVATE int HAVEUID = 0; PRIVATE int DISABLESIZE=99999999; PRIVATE int TIDYSIZE=0; PRIVATE int VRECURSE; PRIVATE int VAGE; PRIVATE int VTIMEOUT=0; PRIVATE mode_t PLUSMASK; PRIVATE mode_t MINUSMASK; PRIVATE u_long PLUSFLAG; PRIVATE u_long MINUSFLAG; /* Parsing flags etc */ PUBLIC enum actions ACTION = none; PRIVATE enum vnames CONTROLVAR = nonexistentvar; PRIVATE enum fileactions FILEACTION = warnall; PRIVATE flag ACTION_IS_LINK = false; PRIVATE flag ACTION_IS_LINKCHILDREN = false; PRIVATE flag MOUNT_ONTO = false; PRIVATE flag MOUNT_FROM = false; PRIVATE flag HAVE_RESTART = false; PRIVATE flag ACTIONPENDING = false; PRIVATE flag HOMECOPY=false; PRIVATE short SECURE=false; PRIVATE char *COMMATTRIBUTES[] = { "recurse", "mode", "owner", "group", "age", "action", "pattern", "links", "type", "destination", "force", "backup", "rotate", "size", "matches", "signal", "exclude", "copy", "symlink", "copytype", "linktype", "include", "dirlinks", "rmdirs", "server", "define", "timeout", "freespace", "nofile", "acl", "purge", "useshell", "syslog", "inform", "netmask", "broadcast", "ignore", "deletedir", "deletefstab", "stealth", "checksum", "flags", "secure", "root", NULL }; /*******************************************************************/ /* */ /* editfiles object : variables belonging to Editfiles */ /* editfiles uses Item */ /* */ /*******************************************************************/ PUBLIC int EDITFILESIZE = 10000; PRIVATE int NUMBEROFEDITS = 0; PRIVATE char VEDITABORT[maxlinksize]; PRIVATE int CURRENTLINENUMBER = 1; /* current line number in file */ PRIVATE struct Item *CURRENTLINEPTR = NULL; /* Ptr to current line */ PRIVATE struct re_pattern_buffer *SEARCHPATTBUFF; PRIVATE struct re_pattern_buffer *PATTBUFFER; PRIVATE int EDITGROUPLEVEL=0; PRIVATE int SEARCHREPLACELEVEL=0; PRIVATE int FOREACHLEVEL = 0; PRIVATE int AUTOCREATED = 0; PRIVATE char *COMMENTSTART; PRIVATE char *COMMENTEND; PUBLIC char *VEDITNAMES[] = { "NoEdit", "DeleteLinesStarting", "DeleteLinesContaining", "DeleteLinesMatching", "AppendIfNoSuchLine", "PrependIfNoSuchLine", "WarnIfNoSuchLine", "WarnIfLineMatching", "WarnIfNoLineMatching", "WarnIfLineStarting", "WarnIfLineContaining", "WarnIfNoLineStarting", "WarnIfNoLineContaining", "HashCommentLinesContaining", "HashCommentLinesStarting", "HashCommentLinesMatching", "SlashCommentLinesContaining", "SlashCommentLinesStarting", "SlashCommentLinesMatching", "PercentCommentLinesContaining", "PercentCommentLinesStarting", "PercentCommentLinesMatching", "ResetSearch", "SetSearchRegExp", "LocateLineMatching", "InsertLine", "IncrementPointer", "ReplaceLineWith", "DeleteToLineMatching", "HashCommentToLineMatching", "PercentCommentToLineMatching", "SetScript", "RunScript", "RunScriptIfNoLineMatching", "RunScriptIfLineMatching", "AppendIfNoLineMatching", "PrependIfNoLineMatching", "DeleteNLines", "EmptyEntireFilePlease", "GotoLastLine", "BreakIfLineMatches", "BeginGroupIfNoMatch", "BeginGroupIfNoLineMatching", "BeginGroupIfNoSuchLine", "EndGroup", "Append", "Prepend", "SetCommentStart", "SetCommentEnd", "CommentLinesMatching", "CommentLinesStarting", "CommentToLineMatching", "CommentNLines", "UnCommentNLines", "ReplaceAll", "With", "SetLine", "FixEndOfLine", "AbortAtLineMatching", "UnsetAbort", "AutomountDirectResources", "UnCommentLinesContaining", "UnCommentLinesMatching", "InsertFile", "CommentLinesContaining", "BeginGroupIfFileIsNewer", "BeginGroupIfFileExists", "BeginGroupIfNoLineContaining", "AutoCreate", "ForEachLineIn", "EndLoop", "ReplaceLinesMatchingField", "SplitOn", "AppendToLineIfNotContains", "DeleteLinesAfterThisMatching", "DefineClasses", "CatchAbort", "Backup", "Syslog", "Inform", NULL }; /*******************************************************************/ /* */ /* Processes object : Process */ /* */ /* */ /*******************************************************************/ PUBLIC char *SIGNALS[] = { "NOSIG", "SIGHUP", /* hangup */ "SIGINT", /* interrupt */ "SIGQUIT", /* quit */ "SIGILL", /* illegal instruction (not reset when caught) */ "SIGTRAP", /* trace trap (not reset when caught) */ "SIGIOT", /* IOT instruction */ "SIGEMT", /* EMT instruction */ "SIGFPE", /* floating point exception */ "SIGKILL", /* kill (cannot be caught or ignored) */ "SIGBUS", /* bus error */ "SIGSEGV", /* segmentation violation */ "SIGSYS", /* bad argument to system call */ "SIGPIPE", /* write on a pipe with no one to read it */ "SIGALRM", /* alarm clock */ "SIGTERM", /* software termination signal from kill */ "SIGURG", /* urgent condition on IO channel */ "SIGSTOP", /* sendable stop signal not from tty */ "SIGTSTP", /* stop signal from tty */ "SIGCONT", /* continue a stopped process */ "SIGCHLD", /* to parent on child stop or exit */ "SIGTTIN", /* to readers pgrp upon background tty read */ "SIGTTOU", /* like TTIN for output if (tp->t_local<OSTOP) */ "SIGIO", /* input/output possible signal */ "SIGXCPU", /* exceeded CPU time limit */ "SIGXFSZ", /* exceeded file size limit */ "SIGVTALRM", /* virtual time alarm */ "SIGPROF", /* profiling time alarm */ "SIGWINCH", /* window changed */ "SIGLOST", /* resource lost (eg, record-lock lost) */ "SIGUSR1", /* user defined signal 1 */ "SIGUSR2" }; /*******************************************************************/ /* */ /* Network client-server object : Net */ /* */ /* */ /*******************************************************************/ PRIVATE unsigned short PORTNUMBER = 0; PRIVATE char VIPADDRESS[18]; PRIVATE char CFSERVER[maxvarsize]; PRIVATE int CF_TIMEOUT = 10; PRIVATE int CFSIGNATURE; PRIVATE char CFDES1[9]; PRIVATE char CFDES2[9]; PRIVATE char CFDES3[9]; /*******************************************************************/ /* */ /* Adaptive lock object : Lock */ /* */ /* */ /*******************************************************************/ PUBLIC char VLOCKDIR[bufsize]; PUBLIC char VLOGDIR[bufsize]; PUBLIC char VCANONICALFILE[bufsize]; PUBLIC FILE *VLOGFP; /* EOF */